package com.yangyang.androidconnect.util;

import android.os.Environment;
import android.util.LruCache;

import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class DCIMFileUtil {

    private static final LruCache<String, List<File>> fileListCache = new LruCache<>(1); // 缓存文件列表

    public static void updateCache() {
        // 清空缓存
        fileListCache.evictAll();
        getDCIMFilesSortedByDate();
    }

    /**
     * 获取 DCIM 目录及其子目录下的所有文件（排除隐藏文件），并按照最新修改时间排序
     */
    public static List<File> getDCIMFilesSortedByDate() {

        // 检查缓存
        List<File> cachedList = fileListCache.get("dcim_file_list");
        if (cachedList != null) {
            return cachedList;
        }

        // 获取 DCIM 目录
        File dcimDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
        File picturesDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);

        List<File> fileList = FileTraverserWithUtils.listFilesSortedByCreationTime(dcimDir.getAbsolutePath(), picturesDir.getAbsolutePath());
        int size = fileList.size();
        System.out.println(size);

        //List<File> fileList = new ArrayList<>();

        // 递归获取所有文件（排除隐藏文件）
        //getFilesRecursively(dcimDir, fileList);

        // 按照文件的最后修改时间排序（从新到旧）
//        Collections.sort(fileList, new Comparator<File>() {
//            @Override
//            public int compare(File f1, File f2) {
//                return Long.compare(f2.lastModified(), f1.lastModified()); // 降序排序
//            }
//        });

        // 缓存结果
        fileListCache.put("dcim_file_list", fileList);

        return fileList;
    }

    /**
     * 递归获取目录下的所有文件（排除隐藏文件）
     */
    private static void getFilesRecursively(File dir, List<File> fileList) {
        if (dir == null || !dir.exists() || !dir.isDirectory()) {
            return;
        }

        File[] files = dir.listFiles();
        if (files != null) {
            for (File file : files) {
                // 跳过隐藏文件或目录（以 . 开头）
                if (file.getName().startsWith(".")) {
                    continue;
                }

                if (file.isDirectory()) {
                    getFilesRecursively(file, fileList); // 递归获取子目录中的文件
                } else {
                    fileList.add(file); // 添加文件到列表
                }
            }
        }
    }
}